﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Diagnostics;
using RLProject1.ViewModel;

namespace RLProject1 {
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window {

        Random random = new Random();

        public MainWindow() {
            InitializeComponent();
        }

        private void OnMenuClose(object sender, RoutedEventArgs e) {
            this.Close();
        }

        private void MenuItem_About(object sender, RoutedEventArgs e) {
            AboutBox box = new AboutBox();
            box.Show();
        }

        //private void button1_Click(object sender, RoutedEventArgs e) {
        //    Debug.WriteLine("Button one clicked");
        //    MainWindowViewModel mwvm = (MainWindowViewModel)this.DataContext;
        //    mwvm.button1_Click(sender, e);
        //}
        /* Obiges ist "alt bekannte Weise": Button-Click-Event wird hier verarbeitet. In XAML habe die UI-Elemente
         * einen 'DataContext', der auf ein Objekt (das ModelView) referenziert wird, welches das Verhalten umsetzt und
         * Daten manipuliert.
         * 
         * Commands funktionieren auf erste Sicht ähnlich. Es sind allerdings Objekte, die Prüfung und Durchführung einer
         * gewünschten Aktion kapseln, Member des DataContext sind und, wie anzuzeigende Daten, per Binding im XAML an die
         * UI gekoppelt werden. Es ist also nicht nötig, eine Zeile im CodeBehind der View zu schreiben (losere Kopplung).
         * Dies passt somit besser in die WPF-Entwicklung und das damit verbundene (aber nicht zwingend notwendige)
         * MVVM-Pattern.
         * Im MVVM-Pattern hat das ViewModel keinen direkten Einfluss auf UI-Elemente (das ViewModel kennt die UIs normalerweise 
         * nicht). Mit den Commands und ihrer CanExecute-Methode können aber doch automatisch UI-(Aktions-)Elemente aktiviert und
         * deaktiviert werden. (Note: die Darstellung von "normalen" UI-Elementen, wie die Anzeige von Daten, erfolgt über
         * Binding an ModelView-Properties)
         */
    }
}
